home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / comm / xeno / bbbbscd.lha / BBBBScd / System / s / bbsArcExt.rexx next >
OS/2 REXX Batch file  |  1995-03-25  |  6KB  |  233 lines

  1. /*       $VER: 8.0 bbsArcExt.rexx 15 Sep 1994 (15.9.94)
  2.    copyright 1990-94 Richard Lee Stockton FREELY DISTRIBUTABLE
  3.  
  4. ****************************************************************************
  5. CONVERTED FOR XENOLINK PRO BBS. $VERS:1.0 (18.03.95) by Derek Scott,2:259/75
  6.  
  7. Changes:
  8.  
  9. $VER  DATE      DESCRIPTION
  10. ----  ----      -----------
  11. 1.02  25/03/95  Added line to Xconfig:bbbbsCD.config for pre-copy selected 
  12.                 files to Hard disk before archiving. (LZX-AsimCDFS workaround)
  13.                 Also relieves strain on CD jukebox's on multi-node use.
  14. ****************************************************************************
  15.  
  16. Each archive should be no larger than 800,000 bytes
  17. All combined, the uncompressed files must be less than SIZE_LIMIT
  18.  
  19. ***Requires*** "Junkmail" Xenolink Utility, (c) Alan Bland, 1994.         */
  20.  
  21.  
  22. LF='0A'x
  23. PARSE ARG name nodex archiver selected
  24. IF selected='' THEN EXIT
  25. node=VALUE(WORD(nodex,1))
  26.  
  27. IF archiver='H' THEN extension='.LHA'
  28.                 ELSE extension='.LZX'
  29.  
  30. /* read the configuration parameters from XCONFIG:BBBBScd.CFG */
  31. x=OPEN(f,'xconfig:BBBBScd.config','R')
  32. IF x~=0 THEN 
  33.   DO
  34.     bbspath=READLN(f)
  35.     junk=READLN(f)
  36.     junk=READLN(f)
  37.     jmailbase=VALUE(WORD(READLN(f),1))
  38.     emailfrom=READLN(f)
  39.     junk=READLN(f)
  40.     SIZE_LIMIT=VALUE(WORD(READLN(f),1))
  41.     junk=READLN(f)
  42.     copy_path=WORD(READLN(f),1)
  43.     CALL CLOSE(f)
  44.   END
  45. ELSE
  46.   /* can't open config file, so use defaults... :) */
  47.   DO
  48.     bbspath='doors:bbbbsCD/'
  49.     emailfrom='Teri Odin CD'
  50.     jmailbase=0             
  51.     SIZE_LIMIT=5000000      
  52.     copy_path='0'
  53.   END
  54. /***************************************************************************/
  55.  
  56. outfile6='ram:tcdexec'nodex
  57. x=OPEN(f6,outfile6,'W')
  58. CALL WRITELN(f6,'WAIT 3')
  59.  
  60.  
  61. namex=''
  62. DO i=1 TO LENGTH(name)-1
  63.   namext=RIGHT(name,LENGTH(name)-i)
  64.   namext=LEFT(namext,1)
  65.   IF namext='_' THEN namex=namex' '
  66.                 ELSE namex=namex''namext
  67. END
  68. namex=LEFT(name,1)''namex
  69.  
  70. CALL CLOSE(STDOUT)
  71. outname1='RAM:ArcExt.STDOUT'node
  72. CALL OPEN(STDOUT,outname1,'W')
  73.  
  74. bytes=0
  75. tbytes=0
  76. s.=''
  77. s.0=1
  78. lasti=0
  79.  
  80.  
  81. DO i=1 TO WORDS(selected)
  82.   IF RIGHT(WORD(selected,i),1)='*' & i>1 THEN
  83.   DO /* if a recursive archive is next, we need to close current archive */
  84.     s.0=s.0+1
  85.     bytes=0
  86.     lasti=i-1
  87.   END
  88.   IF RIGHT(WORD(selected,i),1)='*' THEN
  89.   DO /* if this entry is a recursive archive process it on its own */
  90.     n=s.0
  91.     s.n=STRIP(s.n WORD(selected,i))
  92.     IF i<WORDS(selected) THEN 
  93.     DO
  94.       s.0=s.0+1
  95.       bytes=800001
  96.       lasti=i
  97.       ITERATE
  98.     END
  99.     ELSE LEAVE i
  100.   END
  101.   /* process normal files in up to 800Kb archives */
  102.   info=STATEF(WORD(selected,i))
  103.   IF info='' THEN ITERATE i
  104.   bytes=bytes+WORD(info,2)
  105.   tbytes=tbytes+WORD(info,2)
  106.   IF tbytes>SIZE_LIMIT THEN LEAVE i
  107.   IF bytes>800000 & (i-lasti)>1 THEN
  108.   DO
  109.     s.0=s.0+1
  110.     bytes=0
  111.     lasti=i
  112.   END
  113.   n=s.0
  114.   s.n=STRIP(s.n WORD(selected,i))
  115. END
  116.  
  117. fdir=bbspath'Files/'name
  118.  
  119. outfile2=bbspath'LastMail'node
  120. x=OPEN(f,outfile2,'R')
  121. IF x=0 THEN EXIT 25
  122. lastm=READLN(f)
  123. CALL CLOSE(f)
  124. IF DATATYPE(lastm,'W') THEN lastm=lastm+1
  125. ELSE lastm=1
  126.  
  127.  
  128. DO i=1 TO s.0
  129.   outfile3=bbspath'LastMail'node
  130.   ADDRESS COMMAND 'ECHO >'outfile3' 'lastm
  131.   outfile4='RAM:ArcList'node
  132.   x=OPEN(f,outfile4,'W')
  133.   IF x=0 THEN EXIT 26
  134.   CALL WRITELN(f,s.i) /* list in a file can be of unlimited length */
  135.   CALL CLOSE(f)
  136.   OPTIONS FAILAT 999
  137.   filearcname=fdir'_'node'_'lastm''extension
  138.  
  139.   IF copy_path~='0' THEN /* pre-copy files to hard disk before archiving */
  140.   DO
  141.     x=OPEN(f,outfile4,'R')
  142.     IF x=0 THEN EXIT 26
  143.     copy_name=copy_path''node
  144.     ADDRESS COMMAND  'delete 'copy_name' ALL'
  145.     ADDRESS COMMAND  'makedir 'copy_name
  146.     DO rl=1
  147.       line=READLN(f)
  148.       IF EOF(f) THEN LEAVE rl
  149.       IF line='' THEN iterate rl
  150.       DO rl2=1 to WORDS(line)
  151.         fname1=WORD(line,rl2)
  152.         fname2=LEFT(fname1,LENGTH(fname1)-2)
  153.         IF RIGHT(fname1,1)='*' THEN 
  154.            comm='COPY 'fname2' 'copy_name'/ ALL CLONE'
  155.         ELSE
  156.            comm='COPY 'fname1' 'copy_name'/'
  157.         ADDRESS COMMAND comm
  158.       END
  159.     END
  160.     IF archiver='H' THEN
  161.        comm='LHA -b64 -P-2 -2amNrZ -r a 'filearcname' 'copy_name'/*'
  162.     ELSE
  163.        comm='LZX -X0 -bi128 -bo128 -m -e -r a 'filearcname' 'copy_name'/*'
  164.     ADDRESS COMMAND comm
  165.     ADDRESS COMMAND 'delete 'copy_name' ALL'
  166.     CALL CLOSE(f)
  167.   END
  168.  
  169.   IF copy_path='0' & archiver='H' THEN
  170.   DO
  171.     comm='LHA -b64 -P-2 -2amNrZ a 'filearcname' @RAM:ArcList'node
  172.     ADDRESS COMMAND comm
  173.   END
  174.  
  175.   If copy_path='0' & archiver='X' THEN
  176.     DO 
  177.     x=OPEN(f,outfile4,'R')
  178.     IF x=0 THEN EXIT 26
  179.     comm='LZX -X0 -bi128 -bo128 -m -e -r a 'filearcname
  180.     DO rl=1
  181.       line=READLN(f)
  182.       IF EOF(f) THEN LEAVE rl
  183.       IF line='' THEN iterate rl
  184.       DO rl2=1 to WORDS(line)
  185.         fname1=WORD(line,rl2)
  186.         ADDRESS COMMAND comm' 'fname1
  187.       END
  188.     END
  189.     CALL CLOSE(f)
  190.   END
  191.  
  192.   temp=WORD(s.i,WORDS(s.i))
  193.   dev=LEFT(temp,POS(':',temp)-1)
  194.   x=OPEN(f,fdir'_'node'_'lastm''extension'.xdl','W')
  195.   IF x=0 THEN EXIT 27
  196.   CALL WRITELN(f,dev)
  197.   CALL WRITELN(f,WORDS(s.i))
  198.   CALL CLOSE(f)
  199.   outfile5=bbspath'Email/'name'_'node'_'lastm
  200.   x=OPEN(f,outfile5,'W')
  201.   IF x=0 THEN EXIT 28
  202.   CALL WRITELN(f,' Mail: 'lastm'   FILE: 'name'_'node' 'lastm''extension)
  203.   CALL WRITELN(f,' From: 'emailfrom)
  204.   CALL WRITELN(f,'   To: 'name)
  205.   temp=' Subj: Archive of selected external device files'
  206.   temp2=''
  207.   IF s.0>1 THEN 
  208.   DO
  209.     temp=temp', part' i 'of' s.0'.'
  210.     temp2=', part' i 'of' s.0'.' 
  211.   END
  212.   CALL WRITELN(f,temp)
  213.   CALL WRITELN(f,' Date: 'DATE('W') DATE() TIME('C'))
  214.   CALL WRITELN(f,LEFT('=',75,'='))
  215.   CALL WRITELN(f,'Here is the archive of files you requested.')
  216.   DO j=1 TO WORDS(s.i)
  217.     CALL WRITELN(f,WORD(s.i,j))
  218.   END
  219.   CALL CLOSE(f)
  220.   lastm=lastm+1
  221.   junkmsgcmd='xutils:junkmail -f "'emailfrom'" -t "'namex'" -s "External file archive'temp2'" -m 0 -i 'outfile5' -b 'jmailbase' -a 'filearcname' -p -k' 
  222.   CALL WRITELN(f6,junkmsgcmd)
  223.   CALL WRITELN(f6,'WAIT 2')
  224. END
  225.  
  226.  
  227. CALL CLOSE(f6)
  228.  
  229. comm='c:runback c:execute ram:tcdexec'node
  230. ADDRESS COMMAND comm
  231. EXIT
  232. /* bbsArcExt.rexx */
  233.